home *** CD-ROM | disk | FTP | other *** search
- /* cat > headers/stack.h << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* stack.h: header for stack.c file */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- #define stack_h 1
-
- #include "all.h"
- #include "newext.h"
-
- /* EOF */
- /* cat > src+obj/stack/create_entrysw.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* create_entrysw: create stack entry frame */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "option.h" */
-
- int
- create_entrysw ()
- {
- int x_origin, y_origin;
- int x_offset, y_offset;
-
- if (window_corner (canvas, LEFT, TOP, &x_origin, &y_origin))
- {
- printf ("Internal error: (create_entrysw) Can't get dimensions of canvas frame - ImageTool terminated!");
- exit (-1);
- }
-
- x_offset = 150;
- y_offset = 75;
-
- entry_frame = window_create (base, FRAME,
- FRAME_SHOW_LABEL, TRUE,
- WIN_SHOW, FALSE,
- WIN_X, x_origin + x_offset,
- WIN_Y, y_origin + y_offset,
- WIN_COLUMNS, 80,
- 0);
- /* panel with entry data */
- entry_panel1 = window_create (entry_frame, PANEL,
- PANEL_FONT, font_panel,
- PANEL_LABEL_BOLD, TRUE,
- WIN_ROWS, 10,
- 0);
- entry_item1 = panel_create_item (entry_panel1, PANEL_TEXT,
- PANEL_VALUE_DISPLAY_LENGTH, 64,
- PANEL_VALUE_STORED_LENGTH, MAXNAMELEN - 1,
- PANEL_LABEL_STRING, "image file name:",
- 0);
- entry_item2 = panel_create_item (entry_panel1, PANEL_TEXT,
- PANEL_VALUE_DISPLAY_LENGTH, 64,
- PANEL_VALUE_STORED_LENGTH, MAXNAMELEN - 1,
- PANEL_LABEL_STRING, "palette file name:",
- 0);
- window_fit_height (entry_panel1);
-
- /* panel with buttons */
- entry_panel2 = window_create (entry_frame, PANEL,
- PANEL_FONT, font_panel,
- PANEL_LABEL_BOLD, TRUE,
- WIN_BELOW, entry_panel1,
- WIN_ROWS, 3,
- 0);
- panel_create_item (entry_panel2, PANEL_BUTTON,
- PANEL_LABEL_IMAGE, panel_button_image (entry_panel2, "+", 3, font_panel_button),
- PANEL_CLIENT_DATA, 1,
- PANEL_NOTIFY_PROC, entry_proc,
- 0);
- panel_create_item (entry_panel2, PANEL_BUTTON,
- PANEL_LABEL_IMAGE, panel_button_image (entry_panel2, "-", 3, font_panel_button),
- PANEL_CLIENT_DATA, 2,
- PANEL_NOTIFY_PROC, entry_proc,
- 0);
- panel_create_item (entry_panel2, PANEL_BUTTON,
- PANEL_LABEL_IMAGE, panel_button_image (entry_panel2, "Show", 6, font_panel_button),
- PANEL_CLIENT_DATA, 3,
- PANEL_NOTIFY_PROC, entry_proc,
- 0);
- panel_create_item (entry_panel2, PANEL_BUTTON,
- PANEL_LABEL_IMAGE, panel_button_image (entry_panel2, "Delete", 6, font_panel_button),
- PANEL_CLIENT_DATA, 4,
- PANEL_NOTIFY_PROC, entry_proc,
- 0);
- panel_create_item (entry_panel2, PANEL_BUTTON,
- PANEL_LABEL_IMAGE, panel_button_image (entry_panel2, "Cancel", 6, font_panel_button),
- PANEL_CLIENT_DATA, 5,
- PANEL_NOTIFY_PROC, entry_proc,
- 0);
- window_fit_height (entry_panel2);
- window_fit_height (entry_frame);
-
- /* set color map same with ImageTool */
- (void) color_entry_win ();
- }
- /* EOF */
- /* cat > src+obj/stack/create_stack_panel.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* create_stack_panel: create panel and menu objects */
- /* for stacking */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "stack.h" */
-
- create_stack_panel ()
- {
- int x, y, ix, iy;
-
- x = 50;
- ix = 75;
- y = 50;
-
- /* panel and menu objects for stacking */
- stack_menu = menu_create (MENU_STRINGS,
- "1",
- "2",
- "3",
- "4",
- "5",
- "6",
- "7",
- "8",
- "9",
- "10",
- 0,
- MENU_FONT, font_menu,
- MENU_GEN_PROC, stack_mark_menu,
- MENU_NOTIFY_PROC, stack_request,
- 0);
- store_but = panel_create_item (panel, PANEL_BUTTON,
- PANEL_ITEM_X, x,
- PANEL_ITEM_Y, y,
- PANEL_LABEL_IMAGE, panel_button_image (panel, "Store", 6, font_panel_button),
- PANEL_SHOW_ITEM, FALSE,
- PANEL_CLIENT_DATA, 1,
- PANEL_EVENT_PROC, stack_event,
- 0);
- store_but_msg = panel_create_item (panel, PANEL_MESSAGE,
- PANEL_ITEM_X, x + 15,
- PANEL_ITEM_Y, y + 30,
- PANEL_LABEL_STRING, " ",
- PANEL_SHOW_ITEM, FALSE,
- 0);
- show_menu = menu_create (MENU_ITEM,
- MENU_STRING, "Image",
- MENU_FONT, font_menu,
- MENU_PULLRIGHT, stack_menu,
- 0,
- MENU_ITEM,
- MENU_STRING, "Entry data",
- MENU_FONT, font_menu,
- MENU_ACTION_PROC, stack_request,
- 0,
- 0);
-
- show_but = panel_create_item (panel, PANEL_BUTTON,
- PANEL_ITEM_X, x + ix,
- PANEL_ITEM_Y, y,
- PANEL_LABEL_IMAGE, panel_button_image (panel, "Show", 6, font_panel_button),
- PANEL_CLIENT_DATA, 2,
- PANEL_SHOW_ITEM, FALSE,
- PANEL_EVENT_PROC, stack_event,
- 0);
- show_but_msg = panel_create_item (panel, PANEL_MESSAGE,
- PANEL_ITEM_X, x + 15 + ix,
- PANEL_ITEM_Y, y + 30,
- PANEL_LABEL_STRING, " ",
- PANEL_SHOW_ITEM, FALSE,
- 0);
- delete_but = panel_create_item (panel, PANEL_BUTTON,
- PANEL_ITEM_X, x + 2 * ix,
- PANEL_ITEM_Y, y,
- PANEL_LABEL_IMAGE, panel_button_image (panel, "Delete", 6, font_panel_button),
- PANEL_CLIENT_DATA, 3,
- PANEL_SHOW_ITEM, FALSE,
- PANEL_EVENT_PROC, stack_event,
- 0);
- delete_but_msg = panel_create_item (panel, PANEL_MESSAGE,
- PANEL_ITEM_X, x + 15 + 2 * ix,
- PANEL_ITEM_Y, y + 30,
- PANEL_LABEL_STRING, " ",
- PANEL_SHOW_ITEM, FALSE,
- 0);
- flush_but = panel_create_item (panel, PANEL_BUTTON,
- PANEL_ITEM_X, x + 3 * ix,
- PANEL_ITEM_Y, y,
- PANEL_LABEL_IMAGE, panel_button_image (panel, "Flush", 6, font_panel_button),
- PANEL_MENU_CHOICE_STRINGS, "Flush storage", 0,
- PANEL_SHOW_MENU, TRUE,
- PANEL_SHOW_ITEM, FALSE,
- PANEL_NOTIFY_PROC, flush_table,
- 0);
- }
- /* EOF */
- /* cat > src+obj/stack/delete_entry.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* delete_entry: delete a table entry */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "stack.h" */
-
- delete_entry (index)
- int index;
- /* input: index of entry to delete */
- {
- pr_close (var_table[index].image);
- free (var_table[index].red);
- free (var_table[index].green);
- free (var_table[index].blue);
- var_table[index].in_use = 0;
- var_table[index].image = NULL;
- sprintf (wkstr, "Note: Entry %d deleted.", index + 1);
- msg_write (wkstr);
-
- sprintf (wkstr, "%2d", index + 1);
- panel_set (delete_but_msg, PANEL_LABEL_STRING, wkstr, 0);
- return;
- }
- /* EOF */
- /* cat > src+obj/stack/display_entrysw.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* display_entrysw: display stack entry frame */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "stack.h" */
-
- int
- display_entrysw (index)
- int index;
- /* input: index in entry table starting at 0. */
- {
- set_entry (index);
-
- window_set (entry_frame, WIN_SHOW, TRUE, 0);
- }
- /* EOF */
- /* cat > src+obj/stack/entry_proc.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* entry_proc: notify proc for entry frame buttons */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "stack.h" */
-
- entry_proc (item, event)
- Panel_item item;
- Event *event;
- {
- int which_but, which_entry, i, j;
-
- which_but = (int) panel_get (item, PANEL_CLIENT_DATA);
- which_entry = (int) window_get (entry_frame, WIN_CLIENT_DATA) - 1;
- switch (which_but)
- {
- case 1: /* display next "higher" table entry data - rap around */
- j = (which_entry == MAXTABLE) ? 0 : which_entry + 1;
- for (i = 0; i < MAXTABLE + 1; i++)
- if (var_table[j].in_use == 1)
- break;
- else
- j = (j == MAXTABLE) ? 0 : j + 1;
- set_entry (j);
- break;
- case 2: /* display next lower table entry data */
- j = (which_entry == 0) ? j = MAXTABLE : which_entry - 1;
- for (i = 0; i < MAXTABLE + 1; i++)
- if (var_table[j].in_use == 1)
- break;
- else
- j = (j == 0) ? j = MAXTABLE : j - 1;
- set_entry (j);
- break;
-
- case 3: /* show the current table entry image on the canvas - puts away this frame */
- window_set (entry_frame, WIN_SHOW, FALSE, 0);
- show_entryimage (which_entry);
- break;
- case 4: /* delete the current table entry - go to next higher entry */
- delete_entry (which_entry);
- j = (which_entry == MAXTABLE) ? 0 : which_entry + 1;
- for (i = 0; i < MAXTABLE + 1; i++)
- if (var_table[j].in_use == 1)
- break;
- else
- j = (j == MAXTABLE) ? 0 : j + 1;
- if (i < MAXTABLE + 1)
- set_entry (j);
- else
- {
- window_set (entry_frame, WIN_SHOW, FALSE, 0);
- msg_write ("Warning: Stack table empty! Nothing shown.");
- break;
- }
- break;
- case 5: /* put away this frame */
- window_set (entry_frame, WIN_SHOW, FALSE, 0);
- break;
- }
- }
- /* EOF */
- /* cat > src+obj/stack/flush_call.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* flush_call: deallocate any memory associated with */
- /* table */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "stack.h" */
-
- flush_call ()
- {
- int i;
-
- for (i = 0; i <= MAXTABLE; i++)
- {
- if (var_table[i].in_use == 1)
- pr_close (var_table[i].image);
- var_table[i].in_use = 0;
- var_table[i].image = NULL;
- free (var_table[i].red);
- free (var_table[i].green);
- free (var_table[i].blue);
- }
- msg_write ("Note: Image table flushed.");
- }
- /* EOF */
- /* cat > src+obj/stack/flush_table.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* flush_table: fush the table */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "stack.h" */
-
- flush_table (item, event)
- Panel_item item;
- Event *event;
- {
- /* deallocate table storage */
- flush_call ();
-
- panel_set (store_but_msg, PANEL_LABEL_STRING, " ", 0);
- panel_set (show_but_msg, PANEL_LABEL_STRING, " ", 0);
- panel_set (delete_but_msg, PANEL_LABEL_STRING, " ", 0);
-
- if ((int) window_get (entry_frame, WIN_SHOW))
- window_set (entry_frame, WIN_SHOW, FALSE, 0);
-
- erase_all ();
-
- clear_request = 0;
- first_middle_down = 0;
-
- return;
- }
- /* EOF */
- /* cat > src+obj/stack/invalid_stack.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* invalid_stack: invalid stack */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "stack.h" */
-
- invalid_stack ()
- {
- Menu_item item;
-
- panel_set (store_but, PANEL_SHOW_ITEM, FALSE, 0);
- panel_set (store_but_msg, PANEL_SHOW_ITEM, FALSE, 0);
-
- panel_set (show_but, PANEL_SHOW_ITEM, FALSE, 0);
- panel_set (show_but_msg, PANEL_SHOW_ITEM, FALSE, 0);
-
- panel_set (delete_but, PANEL_SHOW_ITEM, FALSE, 0);
- panel_set (delete_but_msg, PANEL_SHOW_ITEM, FALSE, 0);
-
- panel_set (flush_but, PANEL_SHOW_ITEM, FALSE, 0);
-
- item = menu_get (image_menu, MENU_NTH_ITEM, 3, 0);
- menu_set (item, MENU_INACTIVE, FALSE, 0);
- }
- /* EOF */
- /* cat > src+obj/stack/put_table.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* put_table: put image in table */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "stack.h" */
-
- put_table (i)
- int i;
- {
- int status;
-
- if ((status = store_in_mem (i)))
- { /* memory allocation problem */
- sprintf (msgstr, "Error: Not enough memory. Stacking image in entry %d failed.", i + 1);
- msg_write (msgstr);
- return (-1);
- }
-
- strcpy (var_table[i].img_name, curr_image.img_name);
- strcpy (var_table[i].pal_name, curr_pal.fn);
-
- var_table[i].org_xdim = curr_image.org_xdim;
- var_table[i].org_ydim = curr_image.org_ydim;
- var_table[i].xdim = curr_image.xdim;
- var_table[i].ydim = curr_image.ydim;
- var_table[i].expanded = curr_image.expanded;
- var_table[i].zoomx = curr_image.zoomx;
- var_table[i].zoomy = curr_image.zoomy;
-
- var_table[i].itype = curr_image.itype;
- var_table[i].img_num = curr_image.img_num;
- var_table[i].ptype = curr_image.ptype;
- var_table[i].pal_num = curr_image.pal_num;
-
- var_table[i].in_use = 1;
-
- sprintf (msgstr, "Note: Entry %d stored.", i + 1);
- msg_write (msgstr);
-
- sprintf (wkstr, "%2d", i + 1);
- panel_set (store_but_msg, PANEL_LABEL_STRING, wkstr, 0);
- }
- /* EOF */
- /* cat > src+obj/stack/set_entry.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* set_entry: display stack entry frame */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "stack.h" */
-
- int
- set_entry (index)
- int index;
- /* input: index in entry table starting at 0.
- It is assumed that the entry is in
- use. */
- {
- /* set values - dummy now */
- panel_set_value (entry_item1, default_cdir);
- panel_set_value (entry_item2, default_pal.fn);
-
- window_set (entry_frame, WIN_CLIENT_DATA, index + 1, 0);
- sprintf (wkstr, "Data: table entry %d", index + 1);
- window_set (entry_frame, FRAME_LABEL, wkstr, 0);
- }
- /* EOF */
- /* cat > src+obj/stack/show_entryimage.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* show_entryimage: display the entry table image */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "stack.h" */
-
- show_entryimage (value)
- int value;
- {
- clear_request = 0;
- square_drawn = 0;
- first_middle_down = 0;
-
- show_on_canvas (value);
-
- sprintf (wkstr, "%2d", value + 1);
- panel_set (show_but_msg, PANEL_LABEL_STRING, wkstr, 0);
-
- return;
- }
- /* EOF */
- /* cat > src+obj/stack/show_on_canvas.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* show_on_canvas: playback image from memory */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "stack.h" */
-
- show_on_canvas (i)
- int i;
- {
- int xdim, ydim;
- char *fn, *pn;
- static struct pixrect *pr;
-
- erase_last ();
-
- if (var_table[i].in_use == 0)
- {
- sprintf (msgstr, "Warning: Entry %d is empty.", i + 1);
- msg_write (msgstr);
- return (-1);
- }
-
- fn = var_table[i].img_name;
- pn = var_table[i].pal_name;
- xdim = var_table[i].xdim;
- ydim = var_table[i].ydim;
- pr = var_table[i].image;
-
- /* set palette and load image */
- color_win (var_table[i].red, var_table[i].green, var_table[i].blue);
- pw_write (pw, startx, starty, xdim, ydim, PIX_SRC, pr, 0, 0);
- panel_set_value (image_board, fn);
- panel_set_value (pal_board, pn);
-
- sprintf (msgstr, "Note: Now showing entry %d. Size = (%d, %d)", i + 1, xdim, ydim);
- msg_write (msgstr);
- msg_write (" Image and palette originally from entries above.");
-
- strcpy (curr_image.img_name, fn);
- strcpy (curr_image.pal_name, pn);
-
- curr_image.itype = var_table[i].itype;
- curr_image.img_num = var_table[i].img_num;
- curr_image.ptype = var_table[i].ptype;
- curr_image.pal_num = var_table[i].pal_num;
-
- curr_image.startx = startx;
- curr_image.starty = starty;
- curr_image.org_xdim = var_table[i].org_xdim;
- curr_image.org_ydim = var_table[i].org_ydim;
- curr_image.xdim = xdim;
- curr_image.ydim = ydim;
- curr_image.image = NULL;
- curr_image.red = NULL;
- curr_image.green = NULL;
- curr_image.blue = NULL;
-
- curr_image.expanded = var_table[i].expanded;
- curr_image.zoomx = var_table[i].zoomx;
- curr_image.zoomy = var_table[i].zoomy;
-
- curr_image.in_use = 0;
-
- reset_pos ();
- return;
- }
- /* EOF */
- /* cat > src+obj/stack/stack_event.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* stack_event: event handler for store, show or delete */
- /* stacking button */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "stack.h" */
-
- stack_event (item, event)
- Panel_item item;
- Event *event;
- {
- int which_button, i;
-
- which_button = (int) panel_get (item, PANEL_CLIENT_DATA);
-
- /* will need the button type in the menu to tell what to do */
- menu_set (stack_menu, MENU_CLIENT_DATA, which_button, 0);
- menu_set (show_menu, MENU_CLIENT_DATA, which_button, 0);
-
- /* store -> stack_menu
- show -> show_menu
- delete -> stack_menu */
-
- if (display_panel_menu (item, event, panel, (which_button != 2) ? stack_menu : show_menu))
- switch (which_button)
- {
- case 1:/* store */
- /* find next available empty slot */
- for (i = 0; i < MAXTABLE + 1; i++)
- if (var_table[i].in_use != 1)
- break;
- if (i < MAXTABLE + 1)
- store_image (i);
- else
- msg_write ("Error: Stack table full! Please delete or flush and try again.");
- break;
-
- case 2:/* show */
- /* find first full slot */
- for (i = 0; i < MAXTABLE + 1; i++)
- if (var_table[i].in_use == 1)
- break;
- if (i < MAXTABLE + 1)
- show_entryimage (i);
- else
- msg_write ("Warning: Stack table empty! Nothing shown.");
- break;
-
- case 3:/* delete */
- msg_write ("Note: You must explicitly select an entry to delete.");
- break;
- }
- }
- /* EOF */
- /* cat > src+obj/stack/stack_mark_menu.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* stack_mark_menu: menu generate proc to mark menu */
- /* before displaying for store, show */
- /* or delete stacking button menu. */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "stack.h" */
-
- Menu
- stack_mark_menu (m, operation)
- Menu m;
- Menu_generate operation;
- {
- int which_button, i;
-
- switch (operation)
- {
- case MENU_DISPLAY:
- which_button = (int) menu_get (m, MENU_CLIENT_DATA);
- switch (which_button)
- {
- case 1: /* store */
- for (i = 0; i < MAXTABLE + 1; i++)
- menu_set ((Menu_item) menu_get (m, MENU_NTH_ITEM, i + 1, 0), MENU_INACTIVE, (var_table[i].in_use != 1) ? FALSE : TRUE, 0);
- break;
-
- case 2: /* show */
- for (i = 0; i < MAXTABLE + 1; i++)
- menu_set ((Menu_item) menu_get (m, MENU_NTH_ITEM, i + 1, 0), MENU_INACTIVE, (var_table[i].in_use != 1) ? TRUE : FALSE, 0);
- break;
-
- case 3: /* delete */
- for (i = 0; i < MAXTABLE + 1; i++)
- menu_set ((Menu_item) menu_get (m, MENU_NTH_ITEM, i + 1, 0), MENU_INACTIVE, (var_table[i].in_use != 1) ? TRUE : FALSE, 0);
- break;
- }
-
- break;
-
- case MENU_DISPLAY_DONE:
-
- break;
-
- case MENU_NOTIFY:
-
- break;
-
- case MENU_NOTIFY_DONE:
-
- break;
- }
- /* The current or newly-created menu is returned */
- return m;
- }
- /* EOF */
- /* cat > src+obj/stack/stack_proc.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* stack_proc: stack routine */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "stack.h" */
-
- stack_proc (m, mi)
- Menu m;
- Menu_item mi;
- {
- /* remove animation buttons if there */
- invalid_ani ();
-
- /* show buttons for stack operation */
- valid_stack ();
- }
- /* EOF */
- /* cat > src+obj/stack/stack_request.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* stack_request: menu notify proc for store, show or */
- /* delete stacking button */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "stack.h" */
-
- caddr_t
- stack_request (m, mi)
- Menu m;
- Menu_item mi;
- {
- int which_button, index, i, which_entry, j;
- char *ptr;
-
- which_button = (int) menu_get (m, MENU_CLIENT_DATA);
- /* printf ("which_button = %d\n", which_button); */
- switch (which_button)
- {
- case 1: /* store */
- index = (int) strtol (menu_get (mi, MENU_STRING), &ptr, 10);
- store_image (index - 1);
- break;
-
- case 2: /* show image or entry data */
- /* printf ("menu string = %s\n", menu_get (mi, MENU_STRING)); */
- if (strcmp (menu_get (mi, MENU_STRING), "Entry data"))
- { /* show image */
- if ((int) window_get (entry_frame, WIN_SHOW) == TRUE)
- window_set (entry_frame, WIN_SHOW, FALSE, 0);
- index = (int) strtol (menu_get (mi, MENU_STRING), &ptr, 10);
- show_entryimage (index - 1);
- }
- else
- { /* show entry data */
- if ((int) window_get (entry_frame, WIN_SHOW))
- break;
- if ((index = (int) strtol (panel_get (show_but_msg, PANEL_LABEL_STRING), &ptr, 10)) == 0)
- { /* find first full slot */
- for (i = 0; i < MAXTABLE + 1; i++)
- if (var_table[i].in_use == 1)
- break;
- if (i < MAXTABLE + 1)
- display_entrysw (i);
- else
- msg_write ("Warning: Stack table empty! Nothing to show.");
- }
- else
- display_entrysw (index - 1);
- }
- break;
-
- case 3: /* delete */
- index = (int) strtol (menu_get (mi, MENU_STRING), &ptr, 10);
- delete_entry (index - 1);
- /* if entry window is up and the entry being
- shown has just been deleted display the
- next higher entry or close the window if
- no entries left. */
- if ((int) window_get (entry_frame, WIN_SHOW))
- {
- if ((which_entry = (int) window_get (entry_frame, WIN_CLIENT_DATA)) == index)
- {
- which_entry--;
- j = (which_entry == MAXTABLE) ? 0 : which_entry + 1;
- for (i = 0; i < MAXTABLE + 1; i++)
- if (var_table[j].in_use == 1)
- break;
- else
- j = (j == MAXTABLE) ? 0 : j + 1;
- if (i < MAXTABLE + 1)
- set_entry (j);
- else
- {
- window_set (entry_frame, WIN_SHOW, FALSE, 0);
- msg_write ("Warning: Stack table empty! Nothing to show.");
- }
- }
- }
- break;
- }
- }
- /* EOF */
- /* cat > src+obj/stack/store_image.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* store_image: store image into a memory slot */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "stack.h" */
-
- store_image (value)
- int value;
- {
- square_drawn = line_drawn = 0;
- first_middle_down = 0;
- clear_request = 0;
-
- put_table (value);
- return;
- }
- /* EOF */
- /* cat > src+obj/stack/store_in_mem.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* store_in_mem: store in memory */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "stack.h" */
-
- store_in_mem (i)
- /* returns: error - 0 = no error
- 1 = memory allocation */
- int i;
- /* input: entry index in table */
- {
- int lastw = curr_image.xdim;
- int lasth = curr_image.ydim;
-
- /* allocation and fill RGB */
- if ((var_table[i].red = (unsigned char *) malloc (LUTSIZE)) == NULL)
- return (1);
- if ((var_table[i].green = (unsigned char *) malloc (LUTSIZE)) == NULL)
- {
- free (var_table[i].red);
- return (1);
- }
- if ((var_table[i].blue = (unsigned char *) malloc (LUTSIZE)) == NULL)
- {
- free (var_table[i].red);
- free (var_table[i].green);
- return (1);
- }
- pw_getcolormap (pw, 0, color_index, var_table[i].red, var_table[i].green, var_table[i].blue);
-
- if ((var_table[i].image = mem_create (lastw, lasth, PIXDEPTH)) == NULL)
- return (1);
-
- pw_read (var_table[i].image, 0, 0, lastw, lasth, PIX_SRC, pw, startx, starty);
- return (0);
- }
- /* EOF */
- /* cat > src+obj/stack/valid_stack.c << "EOF" */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* valid_stack: valid stack */
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- /* SCCS information: %W% %G% - NCSA */
-
- /* #include "stack.h" */
-
- valid_stack ()
- {
- Menu_item item;
-
- /* store button and entry number */
- panel_set (store_but, PANEL_SHOW_ITEM, TRUE, 0);
- panel_set (store_but_msg, PANEL_SHOW_ITEM, TRUE, 0);
-
- /* show button and entry number */
- panel_set (show_but, PANEL_SHOW_ITEM, TRUE, 0);
- panel_set (show_but_msg, PANEL_SHOW_ITEM, TRUE, 0);
-
- /* delete button and entry number */
- panel_set (delete_but, PANEL_SHOW_ITEM, TRUE, 0);
- panel_set (delete_but_msg, PANEL_SHOW_ITEM, TRUE, 0);
-
- /* clear table button */
- panel_set (flush_but, PANEL_SHOW_ITEM, TRUE, 0);
-
- /* disable animation */
- item = menu_get (image_menu, MENU_NTH_ITEM, 3, 0);
- menu_set (item, MENU_INACTIVE, TRUE, 0);
- }
- /* EOF */
-